#include <sys_head.h>

typedef struct data
{
    int len;       // 实际的数据长度，不超过128
    char buf[128]; // 存放数据的缓冲区
} DATA;

int main(int argc, char const *argv[])
{
    // //创建一个名为testFifo的有名管道，并返回管道的文件是否创建成功
    // int ret = mkfifo("/home/student/桌面/testFifo",0666);
    // if (ret == -1)
    // {
    //     perror("mkfifo");
    // }
    // 打开有名管道并读取
    int fd_fifo = open("/home/student/桌面/testFifo", O_RDONLY);
    // 打开文件并写入
    int fd_file = open("2.abc", O_WRONLY | O_CREAT, 0666);
    if (-1 == fd_file)
    {
        perror("open");
        close(fd_fifo);
        exit(0);
    }
    DATA data;
    while (-1 != read(fd_fifo, &data, sizeof(data)))//因为发送的是一个结构体，所以在管道里面读取的也是一个结构体，就是把所有的内容都读出来
    {
        write(fd_file, data.buf, strlen(data.buf));//这里用strlen复制的文件可以打开查看，sizeof却不能
        printf("从管道接收了%d个字节\n", data.len);
        if (data.len < sizeof(data.buf)) // 说明是最后一次读取内容
        {
            break;
        }
    }
    close(fd_fifo);
    close(fd_file);
    printf("读取成功\n");
    return 0;
}
